package empty.dsa.arch

import chisel3._
import chisel3.util._
import empty.dsa.generator.TopModule._
import empty.dsa.arch.sha1_dsaGen
import chisel3.stage._

class top {

}


object Main extends App {
  // 检查是否有足够的参数
  if (args.length < 1) {
    println("Usage: need args")
    sys.exit(1)
  }

  val arg1 = args(0)

  arg1 match {
    case "sha1" =>
      //chisel3.Driver.execute(args, () => topGen(sha1_dsaGen.sha1_dsaModule, "sha1_multi_80PE.txt")) // txt文档是存储在哪里？
            val stage = new ChiselStage
            stage.execute(
                Array("--target-dir", "generated"),
                Seq(chisel3.stage.ChiselGeneratorAnnotation(() => 
                    topGen(sha1_dsaGen.sha1_dsaModule, "sha1_multi_80PE.txt")
                ))
             )
    case _ =>
      println("Invalid argument.")
  }



  // println(s"""

  // ###################################
  // #                                 #
  // #      测试 Parameter 开始        #
  // #                                 #
  // ###################################

  // """)
  // import empty.dsa.util.{EleType, EleTypeFun, Param}
  // // 遍历所有枚举值
  // println("所有元素类型：")
  // EleType.values.foreach(println)
  // // 遍历所有枚举值的id和名称
  // println("枚举值详细信息：")
  // EleType.values.foreach {
  //   ele => println(s"ID: ${ele.id}, 名称：$ele")
  // }
  // // 通过id获取枚举值
  // val aluType = EleType(0)
  // println(s"ALU 元素类型名称：${aluType}") 
  // println(s"""

  // ###################################
  // #                                 #
  // #      测试 Parameter 开始        #
  // #                                 #
  // ###################################

  // """)

  // println(s"""

  // ###################################
  // #                                 #
  // #      测试 ModuleInfo 开始       #
  // #                                 #
  // ###################################

  // """)

  //   import empty.dsa.util.ModuleInfo
  //   import scala.collection.mutable.Map
  //   val testModule = new ModuleInfo(
  //     type_ = "TestModule", 
  //     name = "TestPE", 
  //     modulelist = List(), 
  //     moduleInsts = List(), 
  //     elementLists = Map(
  //         1 -> List(List(1,2), List(3,4)),
  //         2 -> List(List(5), List(6,7,8))
  //     ), 
  //     inPortList = List(), 
  //     outPortList = List(), 
  //     connect = List(), 
  //     width = 32)
  // val cfgList = testModule.getCfgList()
  // println("类型: " + testModule.getType())
  // println("模块名称: " + testModule.getName())
  // println("配置列表: " + cfgList)


  // println(s"""

  // ###################################
  // #                                 #
  // #      测试 ModuleInfo 结束       #
  // #                                 #
  // ###################################

  // """)

  // println(s"""

  // ###################################
  // #                                 #
  // #      测试 dsaParam 开始         #
  // #                                 #
  // ###################################

  // """)
  // import empty.dsa.util.dsaParam._
  // val IB = IBParam(5, 32, "IB")
  // println(s"maxDelay: ${IB.maxDelay}")
  // println(s"width: ${IB.width}" )
  // println(s"Devicename: ${IB.deviceName}")


  // println(s"""

  // ###################################
  // #                                 #
  // #      测试 dsaParam 开始         #
  // #                                 #
  // ###################################

  // """)

}